package database

import (
	"database/sql"
	"github.com/gogf/gf/database/gdb"
)

// Entity is the golang structure for table host.

// Entity is the golang structure for table host.
type Entity struct {
	Id             int  `orm:"id,primary"      json:"id"`                // 主键                                          
	Host        string    `orm:"host"    json:"host"`    // ip地址                                            
	Port        string    `orm:"port"    json:"port"`    // 端口                                     
	Env         string    `orm:"env"     json:"env"`          // 所属环境
	System_name string    `orm:"system_name"       json:"systemName"`                  // 系统名                                   
	Username    string    `orm:"username"    json:"username"`                  // db用户                                          
	Passwd      string    `orm:"passwd"    json:"passwd"`    // pwd                               
	Owner       string    `orm:"owner"                  json:"owner"`    // 属主  
	Status      string    `orm:"status"    json:"status"`    // 状态                       
	Remark      string    `orm:"remark"    json:"remark"`    // 说明                                              
	Is_ha       string    `orm:"is_ha"    json:"is_ha"`    // 是否高可用                                             
	UpdateTime  string    `orm:"update_time"     json:"updateTime"`                  // 更新时间                                          
	UpdateId    int       `orm:"update_id"    json:"updateId"`                  // 更新人                                            
	CreateTime  string    `orm:"create_time"     json:"createTime"`                  // 创建时间                                          
	CreateId    int       `orm:"create_id"    json:"createId"`                  // 创建者     
	
	UpdateName   string            `json:"updateName,omitempty" gconv:"updateName,omitempty"`
	CreateName   string            `json:"createName,omitempty" gconv:"createName,omitempty"`                                 
}

// OmitEmpty sets OPTION_OMITEMPTY option for the model, which automatically filers
// the data and where attributes for empty values.
func (r *Entity) OmitEmpty() *arModel {
	return Model.Data(r).OmitEmpty()
}

// Inserts does "INSERT...INTO..." statement for inserting current object into table.
func (r *Entity) Insert() (result sql.Result, err error) {
	return Model.Data(r).Insert()
}

// Replace does "REPLACE...INTO..." statement for inserting current object into table.
// If there's already another same record in the table (it checks using primary key or unique index),
// it deletes it and insert this one.
func (r *Entity) Replace() (result sql.Result, err error) {
	return Model.Data(r).Replace()
}

// Save does "INSERT...INTO..." statement for inserting/updating current object into table.
// It updates the record if there's already another same record in the table
// (it checks using primary key or unique index).
func (r *Entity) Save() (result sql.Result, err error) {
	return Model.Data(r).Save()
}

// Update does "UPDATE...WHERE..." statement for updating current object from table.
// It updates the record if there's already another same record in the table
// (it checks using primary key or unique index).
func (r *Entity) Update() (result sql.Result, err error) {
	return Model.Data(r).Where(gdb.GetWhereConditionOfStruct(r)).Update()
}

// Delete does "DELETE FROM...WHERE..." statement for deleting current object from table.
func (r *Entity) Delete() (result sql.Result, err error) {
	return Model.Where(gdb.GetWhereConditionOfStruct(r)).Delete()
}